A typical general purpose digital signal processor (DSP) includes a controller which decodes instructions, by controlling operations of a high speed data path, registers, and a memory address generator. Individual instructions are fetched to the controller, typically at the rate of one instruction per clock cycle (or slower), and the controller decodes each instruction and sends control signals to the data path, registers, and memory address generator to perform the actions required by the instruction. Through programmed combinations of instructions, any variety of data processing operations can be accomplished.
Each DSP (or other microprocessor) is associated with a finite, well-defined set of equal-length instructions, which instructions are arranged into programs to operate the DSP. The number and length of the instructions, and the operations they perform, varies from one DSP to another based on the functions desired. For example, some DSPs support a relatively large set of relatively long (e.g., 32-bit) instructions allowing the choice of many different functions; other DSPs support only a small set of relatively short (e.g., 16-bit) instructions providing a choice of fewer functions. Instruction size and complexity are proportional. Larger instructions can identify functions with more specificity than smaller instructions, thus allowing more complex functions to be completed within each instruction cycle. Larger instructions, however, require more memory space to store. Since all instructions are the same size, increasing the size of one instruction causes a proportionate increase in the size of every other instruction, and thus a proportionate increase in the size of all programs for the DSP, even if only a small fraction (or none) of the instructions in a given program make use of the complex operations which necessitated the increased instruction size.